#!/usr/bin/env python
# -*-coding: utf-8 -*-
# Filename: cerrar_ticket.py

##
# Módulos del sistema
try:
    import pygtk
    pygtk.require("2.0")
    import gtk
    import gtk.glade
except ImportError, error:
    print error
    print "Necesitas la librería gráficas gtk+pygtk"
from datetime import datetime

##
# Modulos propios
try:
    from gui.msj_retroalimentacion import MensajeDeAdvertencia, MensajeDeError
    from gui.msj_retroalimentacion import MensajeDeNotificacion
    from lib.funciones_utiles import close
except ImportError, error:
    print error
    print "Error en cerrar_ticket.py"

class CerrarTicket:
    def __init__(self, padre, ticket):
        self.gladefile = "gui/ghhp.glade"
        self.wTree = gtk.glade.XML(self.gladefile,"CerrarTicket")
        #Observacion
        self.padre = padre
        self.ticket = ticket
        self.window = self.wTree.get_widget("CerrarTicket")
        self.window.resize(600, 350)
        self.observaciones = self.wTree.get_widget("textview10")
        #Conectamos las señales
        self.un_dict = {"on_cancelbutton13_clicked": self.cerrar_ticket,
                "on_okbutton14_clicked": self.close}
        self.wTree.signal_autoconnect(self.un_dict)
        #Varbles utiles
        self.nro_ticket = self.wTree.get_widget("label699")
        self.clasificacion_actual = self.wTree.get_widget("label700")
        self.estado_actual = self.wTree.get_widget("label701")
        self.fecha_creacion = self.wTree.get_widget("label702")
        self.fecha_ultimo_cambio = self.wTree.get_widget("label703")
        self.grupo_asociado = self.wTree.get_widget("label704")
        self.datos_iniciales()

    def datos_iniciales(self):
        self.nro_ticket.set_text(str(self.ticket.numero_ticket))
        self.clasificacion_actual.set_text(
                self.ticket.clasificacion_actual.nombre)
        self.estado_actual.set_text(self.ticket.estado_actual.nombre)
        fecha = self.ticket.fecha_creacion.strftime("%d-%m-%Y %H:%M:%S")
        self.fecha_creacion.set_text(fecha)
        fecha = self.ticket.historial_de_estado[-1].fecha.strftime("%d-%m-%Y %H:%M:%S")
        self.fecha_ultimo_cambio.set_text(fecha)
        self.grupo_asociado.set_text(self.ticket.grupo_de_resolucion.nombre)

    def datos_validos(self):
        observacion = self.observaciones.get_buffer()
        start = observacion.get_start_iter()
        end = observacion.get_end_iter()
        if observacion.get_text(start, end) != "":
            return observacion.get_text(start, end), True
        else:
            msj = "Observacion no puede ser nulo en esta operacion."
            print msj
            msj_error = MensajeDeError(msj, self.window)
            msj_error.run()
            return "", False

    def cerrar_ticket(self, widget):
        observacion, bandera = self.datos_validos()
        if bandera:
            #Tenemos que fijarnos que el estado sea solucionado a la espera Ok
            fecha_cierre = datetime.now()
            self.padre.padre.mesa_de_ayuda.cerrar_ticket(
                    self.padre.padre.usuario_logueado,
                    observacion,
                    fecha_cierre,
                    self.ticket)
            fecha, hora = fecha_cierre.strftime("%d-%m-%Y %H:%M:%S").split()
            texto = ("El ticket nro %d" % self.ticket.numero_ticket,
                    "Se cerro correctamente el día: %s a las %s" % (fecha,
                        hora))
            msj = MensajeDeNotificacion("\n".join(texto), self.window)
            if msj.msj.run() == -5:
                msj.msj.destroy()
                self.window.destroy()
                self.padre.mostrar_resultados(self.padre.lista_ticket)
    def close(self,widget):
        close(self.window)
